﻿#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//typedef struct LNode
//{
//	int num;
//	struct LNode* next;
//}List;
//
//List* Create(int x)
//{
//	List* node = (List*)malloc(sizeof(List));
//	if (node == NULL)
//	{
//		perror("malloc fail");
//		exit(-1);
//	}
//	
//	node->num = x;
//	//让next指向空
//	node->next = NULL;
//	return node;
//}
//
//void Pushback(List** pphead, int x)
//{
//	List* node = Create(x);
//}
//int main()
//{
//
//	return 0;
//}

//typedef struct ListNode
//{
//	int num;
//	struct ListNode* prev;
//	struct ListNode* next;
//}LN;
//
//LN* Create(int x)
//{
//	LN* newnode = (LN*)malloc(sizeof(LN));
//	newnode->num = x;
//	newnode->next = NULL;
//	newnode->prev = NULL;
//	return newnode;
//}
//
//LN* Init()
//{
//	LN* phead = Create(-1);
//
//	phead->next = phead;
//	phead->prev = phead;
//	return phead;
//}
//
//void PushBack(LN* phead, int x)
//{
//	LN* tail = phead->prev;		//尾节点
//	LN* newnode = Create(x);
//
//	tail->next = newnode;
//	newnode->prev = tail;
//	newnode->next = phead;
//	phead->prev = newnode;
//}
//
//void Print(LN* phead)
//{
//	LN* cur = phead->prev;
//	printf("尾节点<=>");
//	while (cur != phead)
//	{
//		printf("%d<=>", cur->num);
//		cur = cur->prev;
//	}
//	printf("\n");
//}
//
//int main()
//{
//	//初始化哨兵位
//	
//	LN* plist = Init();
//	PushBack(plist, 1);
//	PushBack(plist, 2);
//	PushBack(plist, 3);
//	PushBack(plist, 4);
//	Print(plist);
//	return 0;
//}

//int main()
//{
//	int a = 0;
//	int sum = 0;
//	int n = 0;
//	int b = 0;
//	scanf("%d%d", &a, &n);
//	while (n--)
//	{
//		b += a;
//		sum += b;
//		a *= 10;
//
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//struct student
//{
//	float score[5];
//	char name[20];
//}a;
//
//int main()
//{
//	scanf("%s", a.name);
//	float sum = 0;
//	int i = 0;
//	int j = 5;
//	float avg = 0;
//	while (j--)
//	{
//		scanf("%f", &a.score[i]);
//		sum += a.score[i];
//		i++;
//	}
//	avg = sum / 5;
//	printf("%f\n", avg);
//	return 0;
//}


//题目：有1、2、3、4个数字，能组成多少个互不相同且无重复数字的三位数
//（意思就是没有像112，113）？都是多少？ 
//1.程序分析：可填在百位、十位、个位的数字都是1、2、3、4。
//组成所有的排列后再去掉不满足条件的排列。

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int i = 0;
//	int count = 0;
//	for (a = 1; a < 5; a++)
//	{
//		for (b = 1; b < 5; b++)
//		{
//			for (i = 1; i < 5; i++)
//			{
//				if (a != b && a != i && b != i)
//				{
//					printf("%d%d%d  ", a, b, i);
//					count++;
//				}
//			}
//		}
//	}
//	printf("%d\n", count);
//	return 0;
//}


/*题目：企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时，奖金可提10% ；
利润高 于10万元，低于20万元时，低于10万元的部分按10% 提成，高于10万元的部分，可可提成7.5 % ；
20万到40万之间时，高于20万元的部分，可提成5 % ；
40万到60万之间时高于40万元的部分，可提成3 % ；
60万到100万之间时，高于60万元的部分，可提成1.5 % ，
高于100万元时，超过100万元的部分按1 % 提成，
从键盘输入当月利润I，求应发放奖金总数？*/

//int main()
//{
//	int I = 0;
//	double total = 0;
//	scanf("%d", &I);
//	if (I <= 10)
//	{
//		total = 10 * 0.1;
//	}
//	else if (I > 10 && I <= 20)
//	{
//		total = 10 * 0.1 + (I - 10) * 0.75;
//	}
//	else if (I > 20 && I <= 40)
//	{
//		total = (I - 20) * 0.5 + 10 * 0.1 + 10 * 0.75;
//	}
//	return 0;
//}


/*题目：一个整数，它加上100后是一个完全平方数，再加上168又是一个完全平方数，请问该数是多少？
1.程序分析：在10万以内判断，先将该数加上100后再开方，再将该数加上268后再开方，
如果开方后的结果满足如下条件，即是结果。请看具体分析：*/

//int main()
//{
//	int i = 0;
//	int x = 0;
//	int y = 0;
//	for (i = 1; i <= 100000; i++)
//	{
//		x = sqrt(i + 100);
//		y = sqrt(i + 268);
//		if (x * x == (i + 100) && y * y == (i + 268))
//		{
//			printf("%d^2 = %d + 100 = %d\n", x, i, i + 100);
//			printf("%d^2 = %d + 268 = %d\n", y, i, i + 268);
//
//		}
//	}
//	return 0;
//}


//题目：输入某年某月某日，判断这一天是这一年的第几天？
//1.程序分析：以3月5日为例，应该先把前两个月的加起来，
//然后再加上5天即本年的第几天，特殊情况，闰年且输入月份大于3时需考虑多加一天。

//int main()
//{
//	int month = 0;
//	int day = 0;
//	int arr[13] = { 0, 31, 28,31,30,31,30,31,31,30,31,30,31 };
//	int year = 0;
//	printf("请输入年、月、日：\n");
//	scanf("%d %d %d", &year, &month, &day);
//	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
//	{
//		arr[2] = 29;
//	}
//	int sum = day;
//	for (int i = 1; i < month; i++)
//	{
//		sum += arr[i];
//	}
//	printf("今年是本年的第%d天\n", sum);
//	return 0;
//}

//题目：输入三个整数x, y, z，请把这三个数由小到大输出。
//1.程序分析：我们想办法把最小的数放到x上，先将x与y进行比较，
//如果x > y则将x与y的值进行交换，然后再用x与z进行比较，
//如果x > z则将x与z的值进行交换，这样能使x最小。

//void swap(int* a, int* b)
//{
//	int tmp = 0;
//	tmp = *a;
//	*a = *b;
//	*b = tmp;
//}
//int main()
//{
//	int x = 0;
//	int y = 0;
//	int z = 0;
//	scanf("%d%d%d", &x, &y, &z);
//	if (x > y)
//	{
//		swap(&x, &y);
//	}
//	if (x > z)
//	{
//		swap(&x, &z);
//	}
//	if (y > z)
//	{
//		swap(&y, &z);
//	}
//	printf("%d %d %d\n", x, y, z);
//	return 0;
//}


//题目：用* 号输出字母C的图案。
//int main()
//{
//	printf("  ****\n");
//	printf(" *\n");
//	printf("*\n");
//	printf("*\n");
//	printf("*\n");
//	printf(" *\n");
//	printf("  ****\n");
//
//	return 0;
//}

//int main()
//{
//	char a = 33;
//	char b = 66;
//	printf("%c%c%c%c%c\n", b, a, a, a, b);
//	printf("%c%c%c%c%c\n", a, b, a, b, a);
//	printf("%c%c%c%c%c\n", a, a, b, a, a);
//	printf("%c%c%c%c%c\n", a, b, a, b, a);
//	printf("%c%c%c%c%c\n", b, a, a, a, b);
//	return 0;
//}

//int main()
//{
//	float d1 = 3.5;
//	float d2 = -3.5;
//	printf("%.4e\n", d1);
//	printf("%-12.5e\n", d2);
//	int i = 252;
//	//printf("##%*d\n", 2, i);
//	printf("%#o\n", i);
//	double f = 20.0;
//	printf("%lf\n", f);
//	char c = ' ';
//	printf("%d\n", c);
//	return 0;
//}

//int main()
//{
//	int i = 0;
//	int j = 0;
//	int k = 0;
//	for (i = 0; i <= 3; i++)
//	{
//		for (j = 0; j <= 2 - i; j++)
//		{
//			printf(" ");
//		}
//		for (k = 0; k <= 2 * i; k++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	for (i = 0; i <= 2; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			printf(" ");
//		}
//		for (k = 0; k <= 4 - 2 * i; k++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}

//struct student
//{
//	char name[20]; //姓名
//	float score1;
//	float score2;
//	float score3;
//	float score4;
//	float score5;
//
//	float aver[5];//每科平均分
//	float av;	  //每个学生成绩平均分
//};
//
//int main()
//{
//	int i = 0;
//	struct student a[10];
//	return 0;
//}


//题目：输出9 * 9口诀。
//1.程序分析：分行与列考虑，共9行9列，i控制行，j控制列。

//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 1; i < 10; i++)
//	{
//		for (j = 1; j <= i; j++)
//		{
//			printf("%d*%d=%d\t", i, j, i * j);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//题目：要求输出国际象棋棋盘。
//1.程序分析：用i控制行，j来控制列，根据i + j的和的变化来控制输出黑方格，还是白方格。

//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 8; i++)
//	{
//		for (j = 0; j < 8; j++)
//		{
//			if (!((i + j) % 2))
//			{
//				printf("#");
//			}
//			else
//			{
//				printf(" ");
//			}
//		}
//		printf("\n");
//	}
//	return 0;
//}

//【程序11】
//题目：古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，
//小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，问每个月的兔子总数为多少？
//1.程序分析：　兔子的规律为数列1, 1, 2, 3, 5, 8, 13, 21....

//int main()
//{
//	int sum = 0;
//	
//	int i = 0;
//	int j = 1, k = 1;
//	for (i = 1; i <= 12; i++)
//	{
//		printf("%d %d\n", j, k);
//
//		j += k;
//		k += j;
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//int fab(int n)
//{
//	if (n <= 2 )
//		return 1;
//
//	return fab(n - 1) + fab(n - 2);
//}
//int main()
//{
//	for (int i = 1; i < 13; i++)
//	{
//		printf("%d\n", fab(i));
//	}
//	return 0;
//}


//题目：判断101 - 200之间有多少个素数，并输出所有素数。
//1.程序分析：判断素数的方法：用一个数分别去除2到sqrt(这个数)，
//如果能被整除，则表明此数不是素数，反之是素数。 　　　　
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int flag = 1;
//	for (i = 101; i <= 200; i++)
//	{
//		for (j = 2; j <= sqrt(i); j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag)
//		{
//			printf("%d ", i);
//		}
//		flag = 1;
//	}
//	return 0;
//}

//题目：打印出所有的“水仙花数”，所谓“水仙花数”是指一个三位数，其各位数字立方和等于该数本身。
//例如：153是一个“水仙花数”，因为153 = 1的三次方＋5的三次方＋3的三次方。
//1.程序分析：利用for循环控制100 - 999个数，每个数分解出个位，十位，百位。

//int main()
//{
//	int i = 0;
//	int sum = 0;
//	int j = 0;
//	int k = 0;
//	int x = 0;
//	for (i = 100; i <= 999; i++)
//	{
//		j = i / 100;
//		k = (i / 10) % 10;
//		x = i % 10;
//		sum = pow(j, 3) + pow(k, 3) + pow(x, 3);
//		if (sum == i)
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}


//int main()
//{
//	int a[10][10] = { 0 };
//	int i = 0, j = 0;
//	for (i = 0; i < 10; i++)
//	{
//		a[i][0] = 1;
//		a[i][i] = 1;
//	}
//	for (i = 2; i < 10; i++)
//	{
//		for (j = 1; j < i; j++)
//		{
//			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
//		}
//	}
//	for (i = 0; i < 10; i++)
//	{
//		for (j = 0; j < 10; j++)
//		{
//			if (a[i][j] != 0)
//			{
//				printf("%d\t", a[i][j]);
//			}
//		}
//		printf("\n");
//	}
//	return 0;
//}

//int main()
//{
//	char a1[50] = { 0 };
//	char a2[101] = { 0 };
//	scanf("%s", a1);
//	scanf("%s", a2);
//	int len1 = strlen(a1);
//	int len2 = strlen(a2);
//	int i = len2;
//	int j = 0;
//	while (len1--)
//	{
//		a2[i] = a1[j];
//		i++;
//		j++;
//	}
//	a2[i] = '\0';
//	printf("%s\n", a2);
//	return 0;
//}


//题目：利用条件运算符的嵌套来完成此题：学习成绩 >= 90分的同学用A表示，60 - 89分之间的用B表示，
//60分以下的用C表示。
//1.程序分析：(a > b) ? a : b这是条件运算符的基本例子。
//int main()
//{
//	char grade = 0;
//	int score = 0;
//	scanf("%d", &score);
//	grade = (score >= 90) ? 'A' : (score < 60) ? 'C' : 'B';
//	printf("%c\n", grade);
//	return 0;
//}

//题目：输入两个正整数m和n，求其最大公约数和最小公倍数。
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d%d", &a, &b);
//	int i = 0;
//	int j = 0;
//	int max = a > b ? a : b;
//	for (i = max; i >= 1; i--)
//	{
//		if ((a % i == 0) && (b % i == 0))
//		{
//			break;
//		}
//	}
//	for (j = max;; j++)
//	{
//		if ((j % a == 0) && (j % b == 0))
//		{
//			break;
//		}
//	}
//	printf("最大公约数：%d\n最小公倍数：%d\n", i, j);
//	return 0;
//}



//题目：求s = a + aa + aaa + aaaa + aa...a的值，其中a是一个数字。
//例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加)，几个数相加有键盘控制。
//1.程序分析：关键是计算出每一项的值。

//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int sum = 0;
//	int n = 5;
//	int b = 0;
//	while (n--)
//	{
//		b += a;
//		sum += b;
//		a *= 10;
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//题目：一个数如果恰好等于它的因子之和，这个数就称为“完数”。例如6 = 1＋2＋3.编程
//找出1000以内的所有完数。
//1. 程序分析：请参照程序 < --上页程序14.

//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 1; i <= 1000; i++)
//	{
//		int sum = 0;
//		for (j = 1; j <= i/2; j++)
//		{
//			if (i % j == 0)
//			{
//				sum += j;
//			}
//		}
//		if (sum == i)
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}

//题目：一球从100米高度自由落下，每次落地后反跳回原高度的一半；再落下，
//求它在第10次落地时，共经过多少米？第10次反弹多高？
//int main()
//{
//	double h = 100;
//	int n = 9;
//	double sum = 100;
//	while (n--)
//	{
//		h /= 2;
//		sum += h * 2;
//	}
//	printf("%lf %lf\n", sum, h/2);
//	return 0;
//}


//题目：猴子吃桃问题：猴子第一天摘下若干个桃子，当即吃了一半，
//还不瘾，又多吃了一个第二天早上又将剩下的桃子吃掉一半，又多吃了一个。
//以后每天早上都吃了前一天剩下的一半零一个。
//到第10天早上想再吃时，见只剩下一个桃子了。求第一天共摘了多少。
//1.程序分析：采取逆向思维的方法，从后往前推断。

//int main()
//{
//	int i = 1;
//	//int sum = 0;
//	int n = 9;
//	while (n--)
//	{
//		i = (i + 1) * 2;
//		//sum = i;
//	}
//	printf("%d\n", i);
//	return 0;
//}

//int main()
//{
//	int a[6][6] = { 0 };
//	int b[6][6] = { 0 };
//	int n = 0;
//	int i = 0;
//	int j = 0;
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			a[i][j] = i * n + j + 1;
//			printf("%d\t", a[i][j]);
//		}
//		printf("\n");
//	}
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			b[i][j] = a[j][i];
//		}
//	}
//	printf("\n");
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			printf("%d\t", b[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}




//int main()
//{
//	int p = 0, r = 0;
//	int n = 0;
//	int m = 0;
//	int tmp = 0;
//	scanf("%d%d", &n, &m);
//	if (n < m)
//	{
//		tmp = n;
//		n = m;
//		m = tmp;
//	}
//	p = n * m;
//	while (m)
//	{
//		r = n % m;
//		n = m;
//		m = r;
//	}
//	printf("最大公约数：%d\n", n);
//	printf("最小公倍数：%d\n", p / n);
//	return 0;
//}


//题目：两个乒乓球队进行比赛，各出三人。
//甲队为a, b, c三人，乙队为x, y, z三人。
//已抽签决定比赛名单。有人向队员打听比赛的名单。
//a说他不和x比，c说他不和x, z比，请编程序找出三队赛手的名单。

//int main()
//{
//	char a = 0;
//	char b = 0;
//	char c = 0;
//	for (a = 'x'; a <= 'z'; a++)
//	{
//		for (b = 'x'; b <= 'z'; b++)
//		{
//			for (c = 'x'; c <= 'z'; c++)
//			{
//				if ((c != 'x' && c != 'z') && a != 'x')
//				{
//					if (a != c && a != b && c != b)
//					{
//						printf("a=%c b=%c c=%c\n", a, b, c);
//					}
//				}
//			}
//		}
//	}
//	return 0;
//}

//题目：打印出如下图案（菱形）
//
//*
//***
//******
//********
//******
//***
//*

//int main()
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 4; i++)
//	{
//		for (j = 0; j <= i * 2; j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}

//题目：有一分数序列：2 / 1，3 / 2，5 / 3，8 / 5，13 / 8，21 / 13...
//求出这个数列的前20项之和。
//1.程序分析：请抓住分子与分母的变化规律。 

//int main()
//{
//	double i = 1.0;
//	double j = 2.0;
//	double sum = 0;
//	int n = 20;
//	while (n--)
//	{
//		sum += j / i;
//		int b = i;
//		i = j;
//		j = b + j;
//	}
//	printf("%lf\n", sum);
//	return 0;
//}

//题目：求1 + 2!+ 3!+ ... + 20!的和
//1.程序分析：此程序只是把累加变成了累乘。


//int main()
//{
//	int sum = 0;
//	int i = 0;
//	int j = 0;
//	int n = 1;
//	for (i = 1; i <= 20; i++)
//	{
//		n *= i;
//
//		sum += n;
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//题目：利用递归方法求5!。
//int fac(int n)
//{
//	if (n == 1)
//	{
//		return 1;
//	}
//	return n * fac(n - 1);
//}
//int main()
//{
//	int n = 5;
//	int ret = fac(n);
//	printf("%d\n", ret);
//	return 0;
//}


//题目：利用递归函数调用方式，将所输入的5个字符，以相反顺序打印出来。
//void reverse(char* p, int n)
//{
//	if (n == 1)
//	{
//		printf("%c", p[n-1]);
//		return;
//	}
//	else
//	{
//		printf("%c", p[n - 1]);
//
//		reverse(p, n - 1);
//	}
//}
//int main()
//{
//	char a[100] = { 0 };
//	scanf("%s", a);
//	reverse(a, 5);
//	
//	return 0;
//}


//题目：有5个人坐在一起，问第五个人多少岁？他说比第4个人大2岁。
//问第4个人岁数，他说比第3个人大2岁。
//问第三个人，又说比第2人大两岁。
//问第2个人，说比第一个人大两岁。
//最后问第一个人，他说是10岁。请问第五个人多大？
//1.程序分析：利用递归的方法，递归分为回推和递推两个阶段。
//要想知道第五个人岁数，需知道第四人的岁数，依次类推，
//推到第一人（10岁），再往回推。

//int Age(int n)
//{
//	if (n == 1)
//	{
//		return 10;
//	}
//	return 2 + Age(n - 1);
//}
//int main()
//{
//	int ret = Age(5);
//	printf("%d\n", ret);
//	return 0;
//}


//题目：给一个不多于5位的正整数，要求：一、求它是几位数，二、逆序打印出各位数字。
//1. 程序分析：学会分解出每一位数，
//如下解释：(这里是一种简单的算法，师专数002班赵鑫提供)

//int main()
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//	int t = 0;
//	while (n)
//	{
//		t = n % 10;
//		n /= 10;
//		count++;
//		printf("%d", t);
//	}
//	printf("\n");
//	printf("是%d位数\n", count);
//	return 0;
//}

//int main()
//{
//	int arr[3][4] = { 0 };
//	int i = 0, j = 0;
//	int row = 0, colum = 0, max = 0;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 4; j++)
//		{
//			scanf("%d", &arr[i][j]);
//		}
//	}
//	max = arr[0][0];
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 4; j++)
//		{
//			if (arr[i][j] > max)
//			{
//				max = arr[i][j];
//				row = i;
//				colum = j;
//			}
//		}
//	}
//
//	printf("max=%d row=%d colum=%d\n", max, row, colum);
//	return 0;
//}

//int main()
//{
//	int a[100] = { 0 };
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < n; i++)
//	{
//		a[i] = i + 1;
//	}
//	i = 0;
//	while (--n)
//	{
//		if (a[i] != 0)
//		{
//			j++;
//		}
//		if (j == 3)
//		{
//			a[i] = 0;
//			j = 0;
//		}
//		i++;
//	}
//	i = 0;
//	while (a[i] == 0)
//	{
//		i++;
//	}
//	printf("%d\n", a[i]);
//	return 0;
//}


//题目：一个5位数，判断它是不是回文数。即12321是回文数，个位与万位相同，十位与千位相同
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int a[5] = { 0 };
//	int i = 0;
//	while (n)
//	{
//		a[i] = n % 10;
//		i++;
//		n /= 10;
//	}
//	if ((a[0] == a[4]) && (a[1] == a[3]))
//	{
//		printf("yes\n");
//	}
//	else
//	{
//		printf("no\n");
//	}
//	return 0;
//}


//题目：请输入星期几的第一个字母来判断一下是星期几，如果第一个字母一样，
//则继续判断第二个字母。
//程序分析：用情况语句比较好，如果第一个字母一样，
//则判断用情况语句或if语句判断第二个字母。
//int main()
//{
//	char ch = 0;
//	int i = 0;
//	while ((ch = getchar())!='\0')
//	{
//		i++;
//		if (i == 1)
//		{
//			if (ch == 'M')
//			{
//				printf("Monday\n");
//				break;
//			}
//			else if (ch == 'W')
//			{
//				printf("Wednesday\n");
//				break;
//			}
//			else if (ch == 'F')
//			{
//				printf("Friday\n");
//				break;
//			}
//		}
//		if (ch == 'S')
//		{
//			i++;
//		}
//
//	}
//
//	return 0;
//}


//题目：求100之内的素数　
//int main()
//{
//	int i = 0;
//	int count = 0;
//	printf("1 2 ");
//	for (i = 3; i < 101; i += 2)
//	{
//		int flag = 1;
//		for (int j = 2; j < i / 2; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//			}
//		}
//		if (flag)
//		{
//			count++;
//			printf("%d ", i);
//		}
//	}
//	printf("\n%d\n", count + 2);
//	return 0;
//}

//题目：对10个数进行排序
//1.程序分析：可以利用选择法，
//即从后9个比较过程中，选择一个最小的与第一个元素交换，
//下次类推，即用第二个元素与后8个进行比较，并进行交换。
//void Swap(int* p1, int* p2)
//{
//	int tmp = *p1;
//	*p1 = *p2;
//	*p2 = tmp;
//}
//void SelectSort(int* a, int n)
//{
//	int begin = 0;
//	int end = n - 1;
//	while (begin < end)
//	{
//		int min = begin;
//		int max = begin;
//		for (int i = begin + 1; i <= end; i++)
//		{
//			if (a[min] > a[i])
//			{
//				min = i;
//			}
//			if (a[max] < a[i])
//			{
//				max = i;
//			}
//		}
//		Swap(&a[begin], &a[min]);
//		if (max == begin)
//		{
//			max = min;
//		}
//		Swap(&a[end], &a[max]);
//		++begin;
//		--end;
//	}
//}
//int main()
//{
//	int arr[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	SelectSort(arr, 10);
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}

//int main()
//{
//	int a[10] = { 0 };
//	int i = 0;
//	int x = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	scanf("%d", &x);
//	for (i = 0; i < 10; i++)
//	{
//		if (x == a[i])
//		{
//			printf("%d\n", i + 1);
//			break;
//		}
//	}
//	if (i == 10)
//	{
//		printf("no found\n");
//	}
//	return 0;
//}

//int Strmpc(char* p1, char* p2)
//{
//	int i = 0;
//	while ((*p1 + i) == (*p2 + i))
//	{
//		if ((*p1 + i) == '\0' || (*p2 + i))
//		{
//			i++;
//			return 0;
//		}
//	}
//	return ((*p1 + i) - (*p2 + i));
//}
//int main()
//{
//	char str1[100] = { 0 };
//	char str2[100] = { 0 };
//	scanf("%s", str1);
//	scanf("%s", str2);
//	int ret = Strmpc(str1, str2);
//	printf("%d\n", abs(ret));
//	return 0;
//}


//题目：求一个3 * 3矩阵对角线元素之和
//1.程序分析：利用双重for循环控制输入二维数组，再将a[i][i]累加后输出。

//int main()
//{
//	int a[3][3] = { 0 };
//	for (int i = 0; i < 3; i++)
//	{
//		for (int j = 0; j < 3; j++)
//		{
//			scanf("%d", &a[i][j]);
//		}
//	}
//	int sum1 = 0;
//	int sum2 = 0;
//	for (int i = 0; i < 3; i++)
//	{
//		sum1 += a[i][i];
//	}
//	for (int i = 2; i >= 0; i--)
//	{
//		sum2 += a[i][i];
//	}
//	printf("%d\n", sum1 + sum2 - a[1][1]);
//	return 0;
//}

//题目：有一个已经排好序的数组。现输入一个数，要求按原来的规律将它插入数组中。
//1. 程序分析：首先判断此数是否大于最后一个数，
//然后再考虑插入中间的数的情况，插入后此元素之后的数，依次后移一个位置。

//int main()
//{
//	int a[11] = { 1, 3, 22, 33, 51, 55, 65, 66, 77, 88 };
//	int n = 0;
//	scanf("%d", &n);
//	if (n > a[9])
//	{
//		a[10] = n;
//	}
//	int i = 0;
//	int j = 0;
//	int end = 10;
//	for (i = 0; i < 10; i++)
//	{
//		if (a[i] > n)
//		{
//			for (j = 10; j > i; j--)
//			{
//				a[j] = a[j - 1];
//			}
//			a[j] = n;
//		}
//	}
//	for (i = 0; i < 11; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//题目：将一个数组逆序输出。
//1.程序分析：用第一个与最后一个交换。

//int main()
//{
//	int a[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	for (i = 9; i >= 0; i--)
//	{
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	return 0;
//}

//题目：打印出杨辉三角形（要求打印出10行如下图）　
//int main()
//{
//	int a[10][10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		a[i][0] = a[i][i] = 1;
//	}
//	int j = 0;
//	for (i = 2; i < 10; i++)
//	{
//		for (j = 1; j < i; j++)
//		{
//			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
//		}
//	}
//	for (i = 0; i < 10; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//题目：输入3个数a, b, c，按大小顺序输出。　
//int main()
//{
//	int a = 0, b = 0, c = 0;
//	scanf("%d%d%d", &a, &b, &c);
//	int tmp = 0;
//	if (a > b)
//	{
//		tmp = a;
//		a = b;
//		b = tmp;
//	}
//	if (a > c)
//	{
//		tmp = a;
//		a = c;
//		c = tmp;
//	}
//	if (b > c)
//	{
//		tmp = c;
//		c = b;
//		b = tmp;
//	}
//	printf("%d %d %d\n", a, b, c);
//	return 0;
//}

//int main()
//{
//	int a[10] = { 0 };
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	int count = 0;
//	int k = n;
//	while (k)
//	{
//		a[i] = k % 10;
//		k /= 10;
//		count++;
//	}
//	int flag = 1, m = count;
//	for (i = 0; i < count; i++)
//	{
//		if (a[i] != a[m - 1])
//		{
//			flag = 0;
//			break;
//		}
//		m--;
//	}
//	if (m)
//	{
//		printf("%d是回文数\n", n);
//	}
//	else
//	{
//		printf("%d不是回文数\n", n);
//	}
//	return 0;
//}


//void strcpy(char* p1, char* p2)
//{
//	while (*p2!='\0')
//	{
//		*p1 = *p2;
//		p1++;
//		p2++;
//	}
//	*p1 = '\0';
//}
//int main()
//{
//	char str1[30] = { 0 };
//	char str2[30] = { 0 };
//	scanf("%s", str1);
//	scanf("%s", str2);
//	strcpy(str1, str2);
//	printf("%s\n", str1);
//	return 0;
//}

//题目：输入数组，最大的与第一个元素交换，最小的与最后一个元素交换，输出数组。
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//	int max = arr[0];
//	int j = 0;
//	int min = arr[0];
//	int m = 0;
//	for (i = 0; i < 10; i++)
//	{
//		if (arr[i] > max)
//		{
//			max = arr[i];
//			j = i;
//		}
//		if (arr[i] < min)
//		{
//			min = arr[i];
//			m = i;
//		}
//	}
//	arr[j] = arr[0];
//	arr[0] = max;
//	arr[m] = arr[9];
//	arr[9] = min;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//题目：有n个整数，使其前面各数顺序向后移m个位置，最后m个数变成最前面的m个数
//int main()
//{
//	int a[10] = { 0 };
//	int b[10] = { 0 };
//	int m = 0;
//	int i = 0;
//	int j = 0;
//	printf("请输入十个数组元素：\n");
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d",&a[i]);
//	}
//	printf("请输入m：\n");
//	scanf("%d", &m);
//
//	for (i = 10 - m; i < 10; i++)
//	{
//		b[j] = a[i];
//		j++;
//	}
//	for(i = 9; i >= m; i--)
//	{
//		a[i] = a[i - m];
//	}
//	for (i = 0; i < j; i++)
//	{
//		a[i] = b[i];
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}



//void substr(char* p1, char* p2, int n)
//{
//	//共传递n个字符
//	while (n--)
//	{
//		//赋值
//		*p2 = *p1;
//		p2++;
//		p1++;
//	}
//	//前面没有把'\0'传给str2,在后面要补上
//	*p2 = '\0';
//}
//int main()
//{
//	char str1[20] = { 0 };
//	char str2[20] = { 0 };
//	scanf("%s", str1);
//	int m = 0;//开始位置
//	int n = 0;//长度
//	scanf("%d%d", &m, &n);
//
//	//传str1中的第m个字符的位置
//	substr(str1 + m, str2, n);
//	
//	printf("%s\n%s\n", str1, str2);
//	return 0;
//}


//题目：有n个人围成一圈，顺序排号。
//从第一个人开始报数（从1到3报数），凡报到3的人退出圈子，
//问最后留下的是原来第几号的那位。
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	int j = 0;
//	int a[100] = { 0 };
//	for (i = 0; i < n; i++)
//	{
//		a[i] = i + 1;
//	}
//	int m = n;
//	i = 0;
//	while (m < n - 1)
//	{
//		if (a[i] != 0)
//		{
//			j++;
//		}
//		if (j == 3)
//		{
//			a[i] = 0;
//			j = 0;
//			m++;
//		}
//		i++;
//		if (i == n)
//		{
//			i = 0;
//		}
//	}
//	i = 0;
//	while (a[i] == 0)
//	{
//		i++;
//	}
//	printf("%d\n", a[i]);
//	return 0;
//}


//题目：写一个函数，求一个字符串的长度，
//在main函数中输入字符串，并输出其长度。

//int main()
//{
//	char str[100] = { 0 };
//	scanf("%s", str);
//	int i = 0;
//	while (str[i] != '\0')
//	{
//		i++;
//	}
//	printf("%d\n", i);
//	return 0;
//}


//题目：编写input()和output()函数输入，输出5个学生的数据记录。
//struct student
//{
//	char name[20];
//	int age;
//	//float score[3];
//}s1;
//
//void Input(struct student* s)
//{
//	scanf("%s", s->name);
//	scanf("%d", &s->age);
//}
//void Output(struct student* s)
//{
//	printf("%s:", s->name);
//	printf("%d\n", s->age);
//}
//int main()
//{
//	Input(&s1);
//	Output(&s1);
//	return 0;
//}


//int main()
//{
//	int a[10] = { 0 };
//	int b[10] = { 0 };
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", &a[i]);
//	}
//	//for (i = 0; i < 10; i++)
//	//{
//	//	printf("%d ", a[i]);
//	//}
//	//printf("\n");
//	int flag = 1;
//	int n = 0;
//	int j = 0;
//	for (i = 0; i < 10; i++)
//	{
//		flag = 1;
//		for (j = 0; j < 10; j++)
//		{
//			if (i != j)
//			{
//				if (a[i] == a[j])
//				{
//					flag = 0;
//					break;
//				}
//			}
//		}
//		if (flag)
//		{
//			b[n] = a[i];
//			n++;
//		}
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", b[i]);
//	}
//	return 0;
//}



//int main()
//{
//	double h = 0;
//	double sum = 100;
//	int n = 0;
//	h = sum / 2;
//	for (n = 2; n < 11; n++)
//	{
//		sum += h*2;
//		h = h / 2;
//	}
//	printf("sum=%f,h=%f\n", sum, h);
//}



//题目：809* ? ? = 800 * ? ? +9 * ? ? +1 其中 ? ? 代表的两位数, 
//8 * ? ? 的结果为两位数，9 * ? ? 的结果为3位数。
//求 ? ? 代表的两位数，及809 * ? ? 后的结果。

//int main()
//{
//	int x = 0;
//	int i = 0;
//	for (i = 10; i < 100; i++)
//	{
//		if ((8 * i < 100) && (9 * i >= 100))
//		{
//			if ((809 * i) == (800 * i + 9 * i))
//			{
//				printf("%d\n", i);
//				break;
//			}
//		}
//	}
//
//	return 0;
//}


//题目：八进制转换为十进制
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int digit = 0;
//	int i = 0;
//	while (n)
//	{
//		digit += n % 10 * pow(8.0, i);
//		i++;
//		n /= 10;
//	}
//	printf("%d\n", digit);
//	return 0;
//}


//题目：一个偶数总能表示为两个素数之和

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int b = 0;
//	int c = 0;
//	int m = 0;
//	for (b = 3; b <= n / 2; b+= 2)
//	{
//		//判断b是不是素数
//		for (c = 2; c < b; c++)
//		{
//			if (b % c == 0)
//			{
//				break;
//			}
//		}
//		if (c >= b)
//		{
//			m = n - b;
//		}
//		else
//		{
//			continue;
//		}
//
//		//判断m是不是素数
//		for (c = 2; c < m; c++)
//		{
//			if (m % c == 0)
//				break;
//		}
//		if (c >= m)
//		{
//			printf("%d=%d+%d\n", n, b, m);
//
//		}
//	}
//
//	return 0;
//}



//int main()
//{
//	int x = 0;
//	int i = 0;
//	for (i = 0;; i++)
//	{
//		if ((i % 5 == 1) && (i % 6 == 5) && (i % 7 == 4) && (i % 11 == 10))
//		{
//			x = i;
//			break;
//		}
//	}
//	printf("%d\n", x);
//	return 0;
//}

//int main()
//{
//	char str[81] = { 0 };
//	int i = 0;
//	gets(str);
//	int count = 0;
//	while (str[i])
//	{
//		if ((str[i] != ' ' && str[i + 1] == ' ') || (str[i] != ' ' && str[i + 1] == '\0'))
//		{
//			count++;
//		}
//		i++;
//	}
//	printf("%d\n", count);
//	return 0;
//}

//#define M 3
//#define N 4
//
//void fun(int a[][N], int n)
//{
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < M; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			a[i][j] = a[i][j] * n;
//		}
//	}
//}
//
//int main()
//{
//	int i = 0, j = 0, n = 0;
//	int a[M][N] = { 1,2,3,4,5,6,7,8,9, 10, 11, 12 };
//	for (i = 0; i < M; i++)
//	{
//		for (j = 0; j < N; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//	scanf("%d", &n);
//	fun(a, n);
//	for (i = 0; i < M; i++)
//	{
//		for (j = 0; j < N; j++)
//		{
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//题目：两个字符串连接程序
//int main()
//{
//	char str1[80] = { 0 };
//	char str2[40] = { 0 };
//	gets(str1);
//	gets(str2);
//	int len = strlen(str1);
//	int i = 0;
//	while (str2[i])
//	{
//		str1[len + i] = str2[i];
//		i++;
//	}
//	printf("%s\n", str1);
//	return 0;
//}


//题目：
//读取7个数（1—50）的整数值，每读取一个值，程序打印出该值个数的＊。

//int main()
//{
//	int n = 0;
//	int x = 0;
//	while (n<=7)
//	{
//		scanf("%d", &x);
//		while (x--)
//		{
//			printf("*");
//		}
//		printf("\n");
//		n++;
//	}
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	double sum = 0.0;
//	for (int i = 1; i <= n; i++)
//	{
//		sum += sqrt(i);
//	}
//	printf("%lf\n", sum);
//	return 0;
//}

//int main()
//{
//	int x1 = 0, y1 = 0, x2 = 0, y2 = 0, x3 = 0, y3 = 0;
//	scanf("%d,%d%d,%d%d,%d", &x1, &y1, &x2, &y2, &x3, &y3);
//	double a = 0, b = 0, c = 0;
//	a = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
//	b = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
//	c = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
//	double s = 0, area = 0, l = 0;
//	if (a + b > c && a + c > b && b + c > a)
//	{
//		s = (a + b + c) / 2.0;
//		area = sqrt(s * (s - a) * (s - b) * (s - c));
//		l = a + b + c;
//	}
//	printf("周长=%.2lf，面积=%.2lf\n", l, area);
//
//	return 0;
//}

//int main()
//{
//	int i = 0, flag = 0, j = 0, n = 0;
//	for (i = 101; i < 201; i++)
//	{
//		flag = 1;
//		for (j = 2; j < i; j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag)
//		{
//			printf("%d ", i);
//			n++;
//			if (n % 10 == 0)
//			{
//				printf("\n");
//			}
//		}
//	}
//	return 0;
//}
 

//int fun(int t)
//{
//	int i = 0;
//	int f0 = 0, f1 = 1, f2 = f1 + f0;
//	while (f2 <= t)
//	{
//		f0 = f1;
//		f1 = f2;
//		f2 = f1 + f0;
//	}
//	return f2;
//}
//int main()
//{
//	int t = 1000;
//	printf("%d\n", fun(t));
//	return 0;
//}

//int main()
//{
//	int i = 0, j = 0, n = 0;
//	scanf("%d", &n);
//	for (i = 1; i <= n; i++)
//	{
//		for (j = n - i; j > 0; j--)
//		{
//			printf(" ");
//		}
//		for (j = 1; j <= i * 2 - 1; j++)
//		{
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}

//int main()
//{
//	int digit = 0, number = 0, pow = 0, t_number = 0;
//	scanf("%d", &number);
//	t_number = number;
//	pow = 1;
//	while (t_number > 10)
//	{
//		pow *= 10;
//		t_number /= 10;
//	}
//	while (pow >= 1)
//	{
//		digit = number / pow;
//		number = number - digit * pow;
//		pow /= 10;
//		printf("%d ", digit);
//	}
//	printf("\n");
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	int sum = 0;
//	do
//	{
//		if ( n % 2 == 1)
//		{
//			sum += n;
//		}
//		scanf("%d", &n);
//
//	} while (n>0);
//	printf("%d\n", sum);
//	return 0;
//}

//double fact(int n)
//{
//	if (n == 1)
//	{
//		return 1.0;
//	}
//	return n * fact(n - 1);
//}
//int main()
//{
//	double x = 0.0, s = 1.0;
//	scanf("%lf", &x);
//	int i = 0;
//	double m = 0.0;
//	for (i = 1;; i++)
//	{
//		m = pow(x, i) / fact(i);
//		if (fabs(m) < 0.00001)
//		{
//			break;
//		}
//
//		s += m;
//	}
//	printf("%.4lf\n", s);
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int i = 2, j = 1;
//	double sum = 0.0;
//	while (n--)
//	{
//		sum += (i * 1.0) / (j * 1.0);
//		int temp = i;
//		i = j + i;
//		j = temp;
//	}
//	printf("%.2lf\n", sum);
//}

//int main()
//{
//	int a = 0, n = 0, tn = 0, sum = 0;
//	scanf("%d%d", &a, &n);
//	while (n--)
//	{
//		tn = tn * 10 + a;
//		sum = sum + tn;
//	}
//	printf("%d\n", sum);
//	return 0;
//}

//int main()
//{
//	float n = 0;
//	scanf("%f", &n);
//	int count = 0;
//	int sum = 0;
//	int i = 0, j = 0, k = 0;
//	for (i = 1; i < 20; i++)
//	{
//		for (j = 1; j < 100 - i * 5; j++)
//		{
//			for (k = 1; k < 100 - i * 5 - j * 2; k++)
//			{
//				if ((i * 5 + j * 2 + k * 1) == n * 100)
//				{
//					count++;
//					printf("%d个5分，%d个两分，%d个一分\n", i, j, k);
//					sum = i + j + k;
//					printf("硬币数量：%d\n", sum);
//				}
//			}
//		}
//	}
//	printf("共%d种换法\n", count);
//	return 0;
//}


//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int i = 0;
//	for (i = pow(10, n - 1); i < pow(10, n); i++)
//	{
//		int sum = 0;
//		int m = i;
//		while (m)
//		{
//			int a = m % 10;
//			sum += pow(a, n);
//			m /= 10;
//		}
//		if (sum == i)
//		{
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}

//int main()
//{
//	int m = 0, n = 0;
//	scanf("%d%d", &n, &m);
//	int max = n > m ? n : m;
//	int min = n > m ? m : n;
//	int i = 0;
//	for (i = min; i > 0; i--)
//	{
//		if ((n % i == 0) && (m % i == 0))
//		{
//			printf("最大公约数: %d\n", i);
//			break;
//		}
//	}
//	for (i = 1; ; i++)
//	{
//		if ((i * max) % min == 0)
//		{
//			printf("最小公倍数：%d\n", i * max);
//			break;
//		}
//	}
//	return 0;
//}


int main()
{
	int n = 0;
	double h = 0.0, s = 0.0;
	scanf("%d", &n);
	scanf("%lf", &h);
	s = h;
	int i = 0;
	for (i = 1; i < n; i++)
	{
		h = h / 2.0;
		s = s + h * 2;
	}
	printf("s = %.1lf, h = %.1lf\n", s, h/2);
	return 0;
}